package dongtai;

public class jiuyi {
    public static int numDecodings(String s) {
        if(s.charAt(0)-'0'==0){
            return 0;
        }
        if(s.length()==1&&s.charAt(0)-'0'!=0){
            return 1;
        }
        int n=s.length();
        int[] dp=new int[n];
        //若第一个字符串为0，根部就走不到这里
        dp[0]=1;
        if(s.charAt(0)-'0'==0){
            dp[1]=0;
        }
        int a=s.charAt(0)-'0';
        int b=s.charAt(1)-'0';
        if(a!=0&&b==0&&10*a>26){
            dp[1]=0;
        }
        if((a!=0&&b!=0&&10*a+b>26)||(a!=0&&b==0&&(10*a+b)<=26)){
            dp[1]=1;
        }
        if(a!=0&&b!=0&&10*a+b<=26){
            dp[1]=2;
        }
        for(int i=2;i<n;i++){
            if((s.charAt(i)-'0')!=0&&10*(s.charAt(i-1)-'0')+(s.charAt(i)-'0')>=10&&10*(s.charAt(i-1)-'0')+(s.charAt(i)-'0')<=26){
                dp[i]=dp[i-1]+dp[i-2];
            }
            //单独解码成功，混合解码失败
            if(((s.charAt(i)-'0')!=0&&(s.charAt(i-1)-'0')==0)||((s.charAt(i)-'0')!=0&&10*(s.charAt(i-1)-'0')+(s.charAt(i)-'0')>26)){
                dp[i]=dp[i-1];
            }
            //单独解码失败，混合解码成功
            if((s.charAt(i)-'0')==0&&10*(s.charAt(i-1)-'0')+(s.charAt(i)-'0')>=10&&10*(s.charAt(i-1)-'0')+(s.charAt(i)-'0')<=26){
                dp[i]=dp[i-2];
            }

        }
        return dp[n-1];
    }


    public static void main(String[] args) {
        String s="0123";
        int i = numDecodings(s);
        System.out.println(i);

    }
}
